# 石头剪刀布的游戏
# 分析：
# 角色：电脑、人
# 规则：石头 ‐‐> 剪刀 剪刀 ‐‐> 布 布 ‐‐> 石头
# 石头用数字1表示，剪刀用数字2表示 布用数字3表示
# 结果：人胜利、打平、人输了
# 思考：如何编写判断的条件？
# 条件1：人赢了 ‐‐> (人出1同时电脑出2) 或 （人出2同时电脑出3）或 （人出3同时电脑出1）
# 条件2：打平 ‐‐> 人出的和电脑一样
# 条件3：人输了‐‐> 上述条件都不满足

# 分析：
# 映射：石头=1，剪刀=2，布=3
# 人赢的三种情况：
# (1,2) 石头砸剪刀；(2,3) 剪刀剪布；(3,1) 布包石头
# 平局：人 == 电脑
# 否则人输
# 电脑随机出，人通过 input 选择；一局定胜负，循环可继续

# ===== 石头剪刀布小游戏 =====
# 映射表：数字 -> 文字，方便后续打印
mapping = {1: "石头", 2: "剪刀", 3: "布"}
# 电脑随机出拳需要用到 random 模块
import random
def judge(human, pc):
    """
    判断一局比赛的结果
    :param human: 人出的数字 1石头 2剪刀 3布
    :param pc:    电脑出的数字
    :return: 1 表示人赢；0 表示平局；-1 表示人输
    """
    # 1. 平局：数字相同
    if human == pc:
        return 0

    # 2. 人赢的三种情况（石头砸剪刀、剪刀剪布、布包石头）
    if (human == 1 and pc == 2) or \
       (human == 2 and pc == 3) or \
       (human == 3 and pc == 1):
        return 1

    # 3. 其余情况都是人输
    return -1

def one_round():
    """进行一局比赛"""
    # 获取玩家输入，直接转成整数
    human = int(input("请输入：1石头 2剪刀 3布 >>> "))
    # 电脑随机生成 1~3
    pc = random.randint(1, 3)
    # 打印双方出的拳
    print(f"你出：{mapping[human]}，电脑出：{mapping[pc]}")
    # 调用 judge 得到结果代码
    res = judge(human, pc)
    # 根据结果代码打印中文提示
    result_msg = {1: "你赢了！", 0: "平局！", -1: "你输了！"}
    print(result_msg[res])

# 如果脚本被直接运行，而不是被导入，则自动开局
if __name__ == "__main__":
    one_round()